package com.hyh.spring.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @BelongsPackage: com.hyh.spring.controller
 * @ClassName ConfigClientController
 * @Author: hyhWTX
 * @CreateTime: 2023-05-01  23:22
 * @Description: TODO (一句话描述以下该类的功能)
 * @Version: 1.0
 */
@RestController
@RefreshScope
/**
 * 添加Rabbit MQ 作为广播中间件，实现了分布式自动刷新配置功能
 * 什么是总线
 * 在微服务架构的系统中，通常会使用轻量级的消息代理来构建一个共用的消息主题，并让系统中所有微服务实例都连接上来。
 * 由于该主题中产生的消息会被所有实例监听和消费，
 * 所以称它为消息总线。在总线上的各个实例，都可以方便地广播一些需要让其他连接在该主题上的实例都知道的消息。
 *
 * 基本原理
 * ConfigClient实例都监听MQ中同一个topic(默认是springCloudBus)。当一个服务刷新数据的时候，
 * 它会把这个信息放入到Topic中，这样其它监听同一Topic的服务就能得到通知，然后去更新自身的配置。
 *
 * 配置完成后，运维人员执行一次命令如：curl -X POST "http://localhost:3344/actuator/bus-refresh"即可
 * 2）利用消息总线触发一个服务端ConfigServer的/bus/refresh端点，而刷新所有客户端的配置
 * 一次发送，处处生效
 *
 *
 * 指定具体某一个实例生效而不是全部
 * 公式：http://localhost:配置中心的端口号/actuator/bus-refresh/{destination}
 * 如：curl -X POST "http://localhost:3344/actuator/bus-refresh/config-client:3355"
 * 其中：config-client:3355。即就是name+端口号
 */
public class ConfigClientController
{
    @Value("${server.port}")
    private String serverPort;

    @Value("${config.info}")
    private String configInfo;

    @GetMapping("/configInfo")
    public String configInfo()
    {
        return "serverPort: "+serverPort+"\t\n\n configInfo: "+configInfo;
    }

}
